package club.xyes.remotedisplay.jni;

/**
 * 2018/11/12 Create by 郭文梁
 * OLEDScreen
 * OLED屏幕操作行为定义
 *
 * @author 郭文梁
 * @date 2018/11/12
 */
@SuppressWarnings("all")
public interface OLEDScreen {
    /////以下操作执行后立即生效

    /**
     * SSD1306芯片初始化
     */
    void init();

    /**
     * 显示默认位图（hard code in c++）
     */
    void display();

    /**
     * 写入数据
     *
     * @param data 位图数据
     */
    void fill(int[][] data);

    /**
     * 写入数据
     *
     * @param data 压平后的二维数组
     */
    void fill(int[] data);

    /**
     * 打开显示
     */
    void on();

    /**
     * 关闭显示
     */
    void off();

    /**
     * 设置内存指针位置
     *
     * @param x x坐标
     * @param y y坐标
     */
    void setPosition(int x, int y);

    /**
     * 显示字符串
     *
     * @param str  字符串内容
     * @param font 字体名称
     * @param size 字体大小
     * @param x    x坐标
     * @param y    y坐标
     */
    void drawString(String str, String font, int size, int x, int y);

    /**
     * 清空显示
     */
    void clear();

    /**
     * 反显
     *
     * @param inverse 是否反显
     */
    void inverse(boolean inverse);
    ////////以上操作执行后立即生效

    ////////以下操作执行后只是修改本地缓存，需要调用show()方法后才能生效

    /**
     * 将缓存区的数据刷入屏幕
     */
    void show();

    /**
     * 在指定坐标覆盖内容
     *
     * @param x    x坐标
     * @param y    y坐标
     * @param data 数据
     */
    void superposition(int x, int y, int[] data);
    ////////以上操作执行后只是修改本地缓存，需要调用show()方法后才能生效
}
